From 03b3d1627fcd68223d2dc1d32234cd2debedb274 Mon Sep 17 00:00:00 2001 From: "emellor@leeni.uk.xensource.com" Date: Wed, 9 Aug 2006 09:52:43 +0100 Subject: [PATCH] Better diagnosis of the failure when Xend crashes. Thanks to Hollis Blanchard for diagnosis. Signed-off-by: Ewan Mellor --- tools/python/xen/util/xmlrpclib2.py | 5 +++++ tools/python/xen/xm/create.py | 2 +- tools/python/xen/xm/main.py | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/python/xen/util/xmlrpclib2.py b/tools/python/xen/util/xmlrpclib2.py index c4976abc2e..5231881d22 100644 --- a/tools/python/xen/util/xmlrpclib2.py +++ b/tools/python/xen/util/xmlrpclib2.py @@ -138,6 +138,11 @@ class TCPXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer): def _marshaled_dispatch(self, data, dispatch_method = None): params, method = xmlrpclib.loads(data) + if False: + # Enable this block of code to exit immediately without sending + # a response. This allows you to test client-side crash handling. + import sys + sys.exit(1) try: if dispatch_method is not None: response = dispatch_method(method, params) diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py index d993fc32ab..545d127595 100644 --- a/tools/python/xen/xm/create.py +++ b/tools/python/xen/xm/create.py @@ -972,7 +972,7 @@ def make_domain(opts, config): import signal if vncpid: os.kill(vncpid, signal.SIGKILL) - raise ex + raise dom = sxp.child_value(dominfo, 'name') diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 83021a49ad..799833a1ca 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -1257,6 +1257,16 @@ def main(argv=sys.argv): else: print >>sys.stderr, "Error: %s" % ex.faultString sys.exit(1) + except xmlrpclib.ProtocolError, ex: + if ex.errcode == -1: + print >>sys.stderr, ( + "Xend has probably crashed! Invalid or missing HTTP " + "status code.") + else: + print >>sys.stderr, ( + "Xend has probably crashed! ProtocolError(%d, %s)." % + (ex.errcode, ex.errmsg)) + sys.exit(1) except (ValueError, OverflowError): err("Invalid argument.") usage(argv[1]) -- 2.30.2